import pandas as pd
import numpy as np

s = pd.Series([1, 3, 6, np.nan, 44, 1])
print(s)
print("------------------")

# 使用pandas.DataFrame 创建给定行标签和列标签的数据
dates = pd.date_range('20210901', periods=6)  # 生产时间序列作为df的行索引
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])
print(df)
print(df['b'])  # 选取所有行的b列数据
print("------------------")

# 使用pandas.DataFrame 创建列标签为“A~F”的数据，行标签的索引号从0开始
df2 = pd.DataFrame({'A': 1.,
                    'B': pd.Timestamp('20210301'),
                    'C': pd.Series(range(4), dtype='float32'),
                    'D': np.array([3] * 4, dtype='int32'),
                    'E': pd.Categorical(["red", "green", "blue", "purple"]),
                    'F': 'fruit'})
print(df2)
print(df2['A'])  # 和下一行是等效的
print(df2.A)
# loc通过标签名字选择某一行数据，或者先选择末行或所有行（：代表所有行），然后选择其中一列或几列数据。例如：
print(df2.loc[:, ['A', 'B']])  # 选取所有行的A，B两列的数据
# iloc可以通过位置选择再不同情况下所需要的数据，如选择某一个、连续选或者跨行选登操作。例如：
print(df2.iloc[3, 1])  # 输出第四行第二列的数据
print(df2.iloc[3:5, 1:3])  # 输出第四行到第五行的第二列到第三列的数据
print("------------------")

# 设置行标签和列标签，如果A的值大于4，则与B相对应的值设置为0
dates = pd.date_range('20210301', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6, 4)), index=dates, columns=['A', 'B', 'C', 'D'])
print(df)
# 要更改B中的数，而更改的位置是取决于A的。对于A大于4的位置，更改B在相应位置上的数为0，代码如下一行：
df.B[df.A > 4] = 0
print(df)
